/*     */ package com.cr.common.json;
/*     */ 
/*     */ import com.cr.common.utils.MyStringUtils;
/*     */ import com.fasterxml.jackson.databind.ObjectMapper;
/*     */ import java.util.ArrayList;
/*     */ import java.util.Collection;
/*     */ import java.util.LinkedHashMap;
/*     */ import java.util.List;
/*     */ import java.util.Map;
/*     */ import java.util.StringTokenizer;
/*     */ import java.util.regex.Matcher;
/*     */ import java.util.regex.Pattern;
/*     */ @SuppressWarnings("unchecked")
/*     */ public class JSONObject extends LinkedHashMap<String, Object> {
/*     */   private static final long serialVersionUID = 1L;
/*     */   
/*  22 */   private static final Pattern arrayNamePattern = Pattern.compile("(\\w+)((\\[\\d+\\])+)");
/*     */   
/*  23 */   private static final ObjectMapper objectMapper = new ObjectMapper();
/*     */   
/*     */   public static class JSONArray extends ArrayList<Object> {
/*     */     private static final long serialVersionUID = 1L;
/*     */     
/*     */     public JSONArray() {}
/*     */     
/*     */     public JSONArray(int size) {
/*  39 */       super(size);
/*     */     }
/*     */     
/*     */     public String toString() {
/*     */       try {
/*  47 */         return JSON.marshal(this);
/*  49 */       } catch (Exception e) {
/*  51 */         throw new RuntimeException(e);
/*     */       } 
/*     */     }
/*     */     
/*     */     public Object set(int index, Object element) {
/*  58 */       return super.set(index, JSONObject.transfer(element));
/*     */     }
/*     */     
/*     */     public boolean add(Object element) {
/*  64 */       return super.add(JSONObject.transfer(element));
/*     */     }
/*     */     
/*     */     public void add(int index, Object element) {
/*  70 */       super.add(index, JSONObject.transfer(element));
/*     */     }
/*     */   }
/*     */   
/*     */   public JSONObject() {}
/*     */   
/*     */   public JSONObject(JSONObject other) {
/*  81 */     super(other);
/*     */   }
/*     */   
/*     */   public String toString() {
/*     */     try {
/*  89 */       return JSON.marshal(this);
/*  91 */     } catch (Exception e) {
/*  93 */       throw new RuntimeException(e);
/*     */     } 
/*     */   }
/*     */   
/*     */   public String toCompactString() {
/*     */     try {
/* 106 */       return objectMapper.writeValueAsString(this);
/* 108 */     } catch (Exception e) {
/* 110 */       throw new RuntimeException(e);
/*     */     } 
/*     */   }
/*     */   
/*     */   public Integer intValue(String name) {
/* 122 */     return valueAsInt(value(name));
/*     */   }
/*     */   
/*     */   public Integer intValue(String name, Integer defaultValue) {
/* 134 */     return (Integer) MyStringUtils.nvl(intValue(name), defaultValue);
/*     */   }
/*     */   
/*     */   public Long longValue(String name) {
/* 145 */     return valueAsLong(value(name));
/*     */   }
/*     */   
/*     */   public Long longValue(String name, Long defaultValue) {
/* 157 */     return (Long) MyStringUtils.nvl(longValue(name), defaultValue);
/*     */   }
/*     */   
/*     */   public Boolean boolValue(String name) {
/* 168 */     return valueAsBool(value(name));
/*     */   }
/*     */   
/*     */   public Boolean boolValue(String name, Boolean defaultValue) {
/* 180 */     return (Boolean) MyStringUtils.nvl(boolValue(name), defaultValue);
/*     */   }
/*     */   
/*     */   public String strValue(String name) {
/* 191 */     return valueAsStr(value(name));
/*     */   }
/*     */   
/*     */   public String strValue(String name, String defaultValue) {
/* 203 */     return (String) MyStringUtils.nvl(strValue(name), defaultValue);
/*     */   }
/*     */   
/*     */   public Object value(String name) {
/* 214 */     int indexDot = name.indexOf('.');
/* 215 */     if (indexDot >= 0)
/* 217 */       return obj(name.substring(0, indexDot)).value(name.substring(indexDot + 1)); 
/* 221 */     Matcher matcher = arrayNamePattern.matcher(name);
/* 222 */     if (matcher.find())
/* 224 */       return endArray(matcher.group(1), matcher.group(2), new EndArrayCallback() {
/*     */             public Object callback(JSONObject.JSONArray arr, int index) {
/* 229 */               return JSONObject.elementAt(arr, index);
/*     */             }
/*     */           }); 
/* 235 */     return get(name);
/*     */   }
/*     */   
/*     */   public JSONObject value(String name, final Object value) {
/* 249 */     int indexDot = name.indexOf('.');
/* 250 */     if (indexDot >= 0) {
/* 252 */       obj(name.substring(0, indexDot)).value(name.substring(indexDot + 1), value);
/*     */     } else {
/* 256 */       Matcher matcher = arrayNamePattern.matcher(name);
/* 257 */       if (matcher.find()) {
/* 259 */         endArray(matcher.group(1), matcher.group(2), new EndArrayCallback<Void>() {
/*     */               public Void callback(JSONObject.JSONArray arr, int index) {
/* 264 */                 JSONObject.elementAt(arr, index, value);
/* 265 */                 return null;
/*     */               }
/*     */             });
/*     */       } else {
/* 271 */         set(name, value);
/*     */       } 
/*     */     } 
/* 274 */     return this;
/*     */   }
/*     */   
/*     */   public JSONObject obj(String name) {
/* 285 */     Matcher matcher = arrayNamePattern.matcher(name);
/* 286 */     if (matcher.find())
/* 288 */       return endArray(matcher.group(1), matcher.group(2), new EndArrayCallback<JSONObject>() {
/*     */             public JSONObject callback(JSONObject.JSONArray arr, int index) {
/* 293 */               return JSONObject.objAt(arr, index);
/*     */             }
/*     */           }); 
/* 299 */     JSONObject obj = getObj(name);
/* 300 */     if (obj == null) {
/* 302 */       obj = new JSONObject();
/* 303 */       put(name, obj);
/*     */     } 
/* 305 */     return obj;
/*     */   }
/*     */   
/*     */   public JSONArray arr(String name) {
/* 317 */     JSONArray arr = getArr(name);
/* 318 */     if (arr == null) {
/* 320 */       arr = new JSONArray();
/* 321 */       put(name, arr);
/*     */     } 
/* 323 */     return arr;
/*     */   }
/*     */   
/*     */   public JSONObject getObj(String name) {
/* 334 */     return (JSONObject)get(name);
/*     */   }
/*     */   
/*     */   public JSONArray getArr(String name) {
/* 345 */     return (JSONArray)get(name);
/*     */   }
/*     */   
/*     */   public Integer getInt(String name) {
/* 356 */     return valueAsInt(get(name));
/*     */   }
/*     */   
/*     */   public Integer getInt(String name, Integer defaultValue) {
/* 368 */     return (Integer) MyStringUtils.nvl(getInt(name), defaultValue);
/*     */   }
/*     */   
/*     */   public Long getLong(String name) {
/* 379 */     return valueAsLong(get(name));
/*     */   }
/*     */   
/*     */   public Long getLong(String name, Long defaultValue) {
/* 391 */     return (Long) MyStringUtils.nvl(getLong(name), defaultValue);
/*     */   }
/*     */   
/*     */   public String getStr(String name) {
/* 402 */     return valueAsStr(get(name));
/*     */   }
/*     */   
/*     */   public String getStr(String name, String defaultValue) {
/* 414 */     return (String) MyStringUtils.nvl(getStr(name), defaultValue);
/*     */   }
/*     */   
/*     */   public Boolean getBool(String name) {
/* 425 */     return valueAsBool(get(name));
/*     */   }
/*     */   
/*     */   public Boolean getBool(String name, Boolean defaultValue) {
/* 437 */     return (Boolean) MyStringUtils.nvl(getBool(name), defaultValue);
/*     */   }
/*     */   
/*     */   public JSONObject set(String name, Object value) {
/* 450 */     put(name, value);
/* 451 */     return this;
/*     */   }
/*     */   
/*     */   public <T> T asBean(Class<T> beanClass) {
/*     */     try {
/* 464 */       return JSON.unmarshal(JSON.marshal(this), beanClass);
/* 466 */     } catch (Exception e) {
/* 468 */       throw new RuntimeException(e);
/*     */     } 
/*     */   }
/*     */   
/*     */   public Object put(String key, Object value) {
/* 479 */     return super.put(key, transfer(value));
/*     */   }
/*     */   
/*     */   public static Integer valueAsInt(Object value) {
/* 484 */     if (value instanceof Integer)
/* 486 */       return (Integer)value; 
/* 488 */     if (value instanceof Number)
/* 490 */       return Integer.valueOf(((Number)value).intValue()); 
/* 492 */     if (value instanceof String)
/* 494 */       return Integer.valueOf((String)value); 
/* 496 */     if (value instanceof Boolean)
/* 498 */       return Integer.valueOf(((Boolean)value).booleanValue() ? 1 : 0); 
/* 502 */     return null;
/*     */   }
/*     */   
/*     */   public static Long valueAsLong(Object value) {
/* 508 */     if (value instanceof Long)
/* 510 */       return (Long)value; 
/* 512 */     if (value instanceof Number)
/* 514 */       return Long.valueOf(((Number)value).longValue()); 
/* 516 */     if (value instanceof String)
/* 518 */       return Long.valueOf((String)value); 
/* 520 */     if (value instanceof Boolean)
/* 522 */       return Long.valueOf(((Boolean)value).booleanValue() ? 1L : 0L); 
/* 526 */     return null;
/*     */   }
/*     */   
/*     */   public static String valueAsStr(Object value) {
/* 532 */     if (value instanceof String)
/* 534 */       return (String)value; 
/* 536 */     if (value != null)
/* 538 */       return value.toString(); 
/* 542 */     return null;
/*     */   }
/*     */   
/*     */   public static Boolean valueAsBool(Object value) {
/* 548 */     if (value instanceof Boolean)
/* 550 */       return (Boolean)value; 
/* 552 */     if (value instanceof Number)
/* 554 */       return Boolean.valueOf((((Number)value).doubleValue() != 0.0D)); 
/* 556 */     if (value instanceof String)
/* 558 */       return Boolean.valueOf((String)value); 
/* 562 */     return null;
/*     */   }
/*     */   
/*     */   private static Object transfer(Object value) {
/* 575 */     if (!(value instanceof JSONObject) && value instanceof Map)
/* 577 */       return toObj((Map<String, Object>)value); 
/* 579 */     if (!(value instanceof JSONArray) && value instanceof Collection)
/* 581 */       return toArr((Collection<Object>)value); 
/* 585 */     return value;
/*     */   }
/*     */   
/*     */   private static JSONArray toArr(Collection<Object> list) {
/* 591 */     JSONArray arr = new JSONArray(list.size());
/* 592 */     for (Object element : list)
/* 594 */       arr.add(element); 
/* 596 */     return arr;
/*     */   }
/*     */   
/*     */   private static JSONObject toObj(Map<String, Object> map) {
/* 601 */     JSONObject obj = new JSONObject();
/* 602 */     for (Map.Entry<String, Object> ent : map.entrySet())
/* 604 */       obj.put(ent.getKey(), transfer(ent.getValue())); 
/* 606 */     return obj;
/*     */   }
/*     */   
/*     */   private static JSONArray arrayAt(JSONArray arr, int index) {
/* 618 */     expand(arr, index);
/* 619 */     if (arr.get(index) == null)
/* 621 */       arr.set(index, new JSONArray()); 
/* 623 */     return (JSONArray)arr.get(index);
/*     */   }
/*     */   
/*     */   private static JSONObject objAt(JSONArray arr, int index) {
/* 635 */     expand(arr, index);
/* 636 */     if (arr.get(index) == null)
/* 638 */       arr.set(index, new JSONObject()); 
/* 640 */     return (JSONObject)arr.get(index);
/*     */   }
/*     */   
/*     */   private static void elementAt(JSONArray arr, int index, Object value) {
/* 652 */     expand(arr, index).set(index, value);
/*     */   }
/*     */   
/*     */   private static Object elementAt(JSONArray arr, int index) {
/* 664 */     return expand(arr, index).get(index);
/*     */   }
/*     */   
/*     */   private static JSONArray expand(JSONArray arr, int index) {
/* 676 */     while (arr.size() <= index)
/* 678 */       arr.add((Object)null); 
/* 680 */     return arr;
/*     */   }
/*     */   
/*     */   private <T> T endArray(String name, String indexesStr, EndArrayCallback<T> callback) {
/* 713 */     JSONArray endArr = arr(name);
/* 714 */     int[] indexes = parseIndexes(indexesStr);
/* 715 */     int i = 0;
/* 716 */     while (i < indexes.length - 1)
/* 718 */       endArr = arrayAt(endArr, indexes[i++]); 
/* 720 */     return callback.callback(endArr, indexes[i]);
/*     */   }
/*     */   
/*     */   private static int[] parseIndexes(String s) {
/* 725 */     int[] indexes = null;
/* 726 */     List<Integer> list = new ArrayList<>();
/* 728 */     StringTokenizer st = new StringTokenizer(s, "[]");
/* 729 */     while (st.hasMoreTokens()) {
/* 731 */       int index = Integer.valueOf(st.nextToken()).intValue();
/* 732 */       if (index < 0)
/* 734 */         throw new RuntimeException(String.format("Illegal index %1$d in \"%2$s\"", new Object[] { Integer.valueOf(index), s })); 
/* 737 */       list.add(Integer.valueOf(index));
/*     */     } 
/* 740 */     indexes = new int[list.size()];
/* 741 */     int i = 0;
/* 742 */     for (Integer tmp : (Integer[])list.<Integer>toArray(new Integer[list.size()]))
/* 744 */       indexes[i++] = tmp.intValue(); 
/* 747 */     return indexes;
/*     */   }
/*     */   
/*     */   private static interface EndArrayCallback<T> {
/*     */     T callback(JSONObject.JSONArray param1JSONArray, int param1Int);
/*     */   }
/*     */ }


/* Location:              D:\tmp\creditorRights-admin\BOOT-INF\lib\creditorRights-common-4.7.0.jar!\com\cr\common\json\JSONObject.class
 * Java compiler version: 8 (52.0)
 * JD-Core Version:       1.1.3
 */